学习 FastAPI:必备了解学习的库:pydantic · TesterHome

您所在的位置:网站首页 pycharm fastapi 学习 FastAPI:必备了解学习的库:pydantic · TesterHome

学习 FastAPI:必备了解学习的库:pydantic · TesterHome

2023-04-08 04:24| 来源: 网络整理| 查看: 265

小白一枚,最近在学习 FastAPI 框架的时候突然对代码很懵: 虽然说的很详细就是个可选参数,但是因为之前对 pydantic 库不了解,只知道 def(a: str) 这种基本用法了解,所以就完全搞不懂它的来源、原理。然后重新回头阅读文档发现原来人家已经把知识点给了,但是我在阅读的时候想当然的以为仅仅图上的就够了,试试证明自己还是年轻 进入正题,要想把 FastAPI 学习好,那 pydantic 就是第一个需要了解的库,废话不多说,下面开始介绍一下它: 首先基础的大家都是也都会用的就是:def(a: str) —>None: 这种了,基础的我就不怎么说,像其他的 int、list 等基础类型都是一样,注意一下像 list 这种也可以继续向列表内部申明元素类型,如下我偷人家 FastAPI 官网的截图:

在这里只简单说一下的两种用途,其他有需要的同学可以自行 Baidu 深入学习:

1.模型 2.Typing 类型中的 Optional 和 Union 1.模型 # 首先引入模块,需要安装的哟 from pydantic import BaseModel # 继承BaseModel class User(BaseModel): username: str password: str describe: str = “非必需”

上面的例子,定义了一个 User 模型,继承自 BaseModel,有 3 个字段,username、password 是一个字符串并且是必需的,describe 是一个带有默认值的字符串并且不是必需的。这样的话在 FastAPI 中请求体的学习就完全理解并可以很快上手使用了

2.Typing 类型中的 Optional 和 Union

这个有篇文档上面说的很详细,俺就直接转摘了:https://cloud.tencent.com/developer/article/1949675 以下函数,参数 a 是必填项,b 给了默认值,是可选项。

a 参数声明为 int 类型 b 参数声明为 int 类型,并给了默认值 1 -> int 是声明函数返回值是 int 类型 def fuc1(a: int, b: int = 1) -> int: print(‘a+b的值为:’, a+b) return a+b if name == ‘main‘: fuc1(2)

如果我们想给 b 参数设置默认值为 None, 如果用户传了 b 参数,b 必须是 int 类型,于是可以设置b: int = None

def fuc1(a: int, b: int = None) -> int: if b: print(‘a+b的值为:’, a+b) return a + b else: print(‘a的值为:’, a) return a if name == ‘main‘: fuc1(2)

以上代码在 pycharm 编辑器上执行是没有问题的,但是有些编辑器并不能识别b: int = None 这种语法。于是就有了 Optional 类。

Optional 可选类型

Optional 的作用是可选类型,作用几乎和带默认值的参数等价。不同的是使用 Optional 会告诉你的 IDE 或者框架:这个参数除了给定的默认值外还可以是 None,而且使用有些静态检查工具如 mypy 时,对 a: int =None 这样类似的声明可能会提示报错,但使用 a :Optional[int] = None 不会。 typing.Optional 可选类型

Optional[X] 等价于 Union[X, None]

请注意,这与可选参数的概念不同,后者是默认参数,具有默认值的可选参数 Optional 仅在其类型注释中不需要限定符,因为它是可选的。 例如:

def foo(arg: int = 0) -> None: …

另一方面,如果 None 允许使用显示值,则 Optional 无论参数是否可选,的适合使用,例如:def foo(arg: Optional[int] = None) -> None: Optional[X] 等价于 Union[X, None],当 Optional 参数的默认值为 None 时

from typing import Optional def func(a: int, b: Optional[int] = None) -> None: “””Optional[int]=None””” if b: print(“a+b的值:”, a+b) else: print(“b is None”) if name == ‘main‘: func(2)

运行结果:b is None 当 Optional 参数的默认值不为 None,为 1 的时候

from typing import Optional def func(a: int, b: Optional[int] = 1) -> None: “””Optional[int]=None””” if b: print(“a+b的值:”, a+b) else: print(“b is None”) if name == ‘main‘: func(a=1, b=None) ![](https://img2022.cnblogs.com/blog/1070438/202202/1070438-20220218214951830-1083066501.png)

此时传 b=None,编辑器也不会提示有问题,这说明函数中 b 是一个可选参数,并且提示你它的默认值可以为 None。 如果一个参数可以是 2 种类型,上面的函数 b 参数,可以是 None, 也可以是 int, 于是可以这样写

from typing import Optional, Union def func(a: int, b: Union[None, int] = 1) -> None: “””Optional[int]=None””” if b: print(“a+b的值:”, a+b) else: print(“b is None”) if name == ‘main‘: func(a=1, b=None) 注:第二点就是转载过来的。仅供学习记录


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3